package com.youkeda.yunmusic.web.control;

import com.youkeda.yunmusic.web.model.Comment;
import com.youkeda.yunmusic.web.model.SongInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
public class SongInfoControl {
    //定义一个songInfoMap的数组
    private static Map<String, SongInfo> songInfoMap = new HashMap<>();

    @Autowired
    private CommentPostControl commentPostControl;

    @RequestMapping(value = "/songInfo")
    public String index(String songId, ModelMap modelMap) {
        System.out.println("运行SongInfoControl中的index函数");
        //如果默认songId没有时指定去年夏天这首歌的id为songId的值
        if (songId == null) {
            songId = "557581476";
        }
        //.get()方法得到数组中的songId赋值给songInfo
        SongInfo songInfo = songInfoMap.get(songId);

        //往前台传数据，可以传对象，可以传List，通过th表达式 ${}可以获取到
        modelMap.addAttribute("song", songInfo);
//        List<Comment> comments=commentPostControl.getComments(songId);
//        modelMap.addAttribute("comments",comments);
        return "index";
    }

    @RequestMapping(value = "/songInfo/get")
    @ResponseBody
    public SongInfo get(String songId) {
        System.out.println("运行SongInfoControl中的get函数");
        SongInfo songInfo = songInfoMap.get(songId);
        return songInfo;
    }

    @PostConstruct
    public void init() {
        System.out.println("运行SongInfoControl中的init函数");
        SongInfo songInfo = new SongInfo();
        songInfo.setId("557581476");
        songInfo.setName("去年夏天");
        songInfo.setSinger("王大毛");
        songInfo.setAlbumName("去年夏天");
        songInfo.setCommentCount("135513");
        songInfo.setAlbumImg("http://p2.music.126.net/5M7Qvv32HaFmMrLN8uehuA==/109951163293243877.jpg?param=130y130");
        songInfo.setLyrics("还有什么等待还有什么悲哀<br>" +
                "这故事中的人不太精彩<br>" +
                "夏去了又回来而人却已不在<br>" +
                "它重复着我汹涌的忍耐<br>" +
                "今年兰花又开开了它也会败<br>" +
                "我想要一个人活得精彩<br>" +
                "有些人总会来<br>" +
                "有些人在我心中在徘徊<br>" +
                "我拿了总会还你拿了就逃开<br>" +
                "在失去中我慢慢的变呆");
        songInfoMap.put("557581476", songInfo);

        songInfo = new SongInfo();
        songInfo.setId("483937795");
        songInfo.setName("撒野");
        songInfo.setSinger("凯瑟喵");
        songInfo.setAlbumName("撒野（巫哲同名小说《撒野》主题曲）");
        songInfo.setCommentCount("165246");
        songInfo.setAlbumImg("http://p2.music.126.net/7bWGHPaWKcN8Kaonhe0I7w==/109951162947439817.jpg?param=130y130");
        songInfo.setLyrics("我一脚踏空,我就要飞起来了<br>" +
                "我向上是迷茫,我向下听见你说这世界是空荡荡<br>" +
                "你说一二三,打碎了过往,消亡<br>" +
                "有风吹，破了的归途，你有没有看到我在唱<br>" +
                "你说一二三转身,你听被抹掉的慌张<br>" +
                "我想,抬头暖阳春草,你给我简单拥抱<br>" +
                "我想,踩碎了迷茫走过时光,睁开眼你就会听到<br>" +
                "我想,左肩有你,右肩微笑<br>" +
                "我想,在你眼里,撒野奔跑<br>" +
                "我想,一个眼神,就到老");
        songInfoMap.put("483937795", songInfo);
    }
}
/*
* 工作原理
 注解解析器：AutowiredAnnotationBeanPostProcessor

Spring容器启动时，AutowiredAnnotationBeanPostProcessor被注册到容器；
扫描代码，如果带有@Autowired注解，则将依赖注入信息封装到InjectionMetadata中（见扫描过程）；
创建bean时（实例化对象和初始化），会调用各种BeanPostProcessor对bean初始化，AutowiredAnnotationBeanPostProcessor负责将相关的依赖注入进来；
@Autowired扫描过程
扫描当前类中标注@Autowired的属性和方法；
再查找父类中注@Autowired的属性和方法，依次遍历；
* */
/*ModelMap对象主要用于传递控制方法处理数据到结果页面，也就是说我们把结果页面上需要的数据放到ModelMap对象中即可，
他的作用类似于request对象的setAttribute方法的作用，用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数： 
addAttribute(String key,Object value); 
在页面上可以通过el变量方式$key或者bboss的一系列数据展示标签获取并展示modelmap中的数据。 
modelmap本身不能设置页面跳转的url地址别名或者物理跳转地址，那么我们可以通过控制器方法的返回值来设置跳转url地址别名或者物理跳转地址。


ModelMap的实例是由bboss mvc框架自动创建并作为控制器方法参数传入，用户无需自己创建。
public String xxxxmethod(String someparam,ModelMap model) 
{ 
//省略方法处理逻辑若干 
//将数据放置到ModelMap对象model中,第二个参数可以是任何java类型 
model.addAttribute("key",someparam); 
...... 
//返回跳转地址 
return "path:handleok"; 
} 
 */